/**
 * Returns `true` if the value is one of the type: `null`, `undefined` or `NaN`.
 *
 * @param {*} value The value to check.
 * @returns {boolean}
 */
export function isNullishOrNaN(value) {
  return value === null || value === undefined || isNaN(value);
}

/**
 * Rounds a number to a specific number of decimal places.
 *
 * @param {number} value The value to round.
 * @param {number|boolean|string|undefined} [option] Either a number of decimal places to round to, a boolean or "auto".
 * @returns {string|number} The (possibly) rounded number as a string (for displaying the correct precision).
 */
export function roundFloat(value, option) {
  if (typeof value !== 'number') {
    return value;
  }
  const stringifyValue = number => number.toString();
  switch (typeof option) {
    case 'number':
      return stringifyValue(value.toFixed(Math.min(Math.max(0, option), 100)));
    case 'boolean':
      return option ? stringifyValue(Math.round(value)) : value;
    case 'string':
      if (option === 'auto') {
        const integerDigits = Math.round(value).toString().length;

        // Make the entire number fit into 8 digits
        return stringifyValue(value.toFixed(8 - integerDigits));
      }
      return value;
    default:
      return value;
  }
}